package com.yc.forum.servlet;

import com.yc.forum.dao.ProblemDao;
import com.yc.forum.dao.RedisDao;
import com.yc.forum.dao.UserDao;
import com.yc.forum.util.Utils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 问题发布：
 *  1.需要修改用户提问后剩余的积分，
 *  2.存入问题数据
 */
@WebServlet(name="PutProblemServlet",value="/PutProblemServlet.s")
public class PutProblemServlet extends HttpServlet {
    com.yc.forum.dao.ProblemDao problemDao=new ProblemDao();
    RedisDao redisDao=new RedisDao();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        //取出前端传过来的值
        String title=req.getParameter("title");//标题
        String module=req.getParameter("module");//发布模块
        String reward=req.getParameter("reward");//悬赏积分
        System.out.println("-----------------init PutProblemServlet---------------------");
        System.out.println(title);
        System.out.println(module);
        System.out.println(reward);
        //mainbody中，在前端对其的  &  进行了转码 woshinidie
        //                      #            nibushiwodie
        //&连接符   #url结束符   需要转码
        String mainbody=req.getParameter("mainbody").replaceAll("woshinidie","&");

        //获取当前登录账号
        HttpSession session= req.getSession();
        String account=session.getAttribute("loginedUser").toString();

        System.out.println("mainbody="+mainbody);


        //截取图片的base64编码
        List<Map<String,String>> base64text= getbase64text(mainbody);
        //循环，存图片
        int i=1;
        //当前时间戳
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        String tims=""+timestamp.getTime();
        for(Map<String,String> b:base64text){
            //将图片存入D盘，返回存入图片的地址
            ServletContext servletContext = this.getServletContext();
            String path3= servletContext.getRealPath("KFImgs")+"/";
            String url= Utils.convertBase64ToImage(b.get("text"),tims+"_"+account+"_"+i,path3);
            //替换mainbody中的值
            mainbody=mainbody.replaceAll(b.get("text"),url);
            i++;
        }
        System.out.println("mainbody="+mainbody);

        //修改用户剩余积分
        Utils.addReward(account,Integer.parseInt(reward));
        System.out.println("account="+account);
        //添加新问题
        int isSuccess=problemDao.addProblem(account,title,module,Integer.parseInt(reward),mainbody);
        Utils.toJson(isSuccess,resp);
    }
    public List<Map<String,String>> getbase64text(String mainbody){

        System.out.println("--------init getbasse64text------------");
        List<Map<String,String>> texts=new ArrayList<>();
        //对<img src=" "> src中的内容做处理

        int beginIndex=0;
        while(true) {
            //返回 <img src=" 字符第一次出现的字符串内的索引，以指定的索引开始搜索。
            String strings = "<img src=\"data";//加上data防止取到网络图片
            //取到 strings 的两个 " 的位置
            int ImgIndexBegin = mainbody.indexOf(strings, beginIndex) + strings.length()-4 - 1;

            System.out.println("ImgIndexBegin="+ImgIndexBegin);
            //如果未找到img标签，则结束循环
            if(ImgIndexBegin<(strings.length() - 1)){
                break;
            }
            int ImgIndexEnd = mainbody.indexOf("\"", ImgIndexBegin + 1);
            System.out.println("ImgIndexEnd="+ImgIndexEnd);
            //取到 img 标签 src中的内容
            String ImgText = mainbody.substring(ImgIndexBegin + 1, ImgIndexEnd);
            //将该次img end索引赋值给beginindex，作为下一次查询的起始点
            beginIndex = ImgIndexEnd;
            //只有本地图片需要上传，网络图片不需要上传保存到本地
            System.out.println("init if()");

            //将开始位置，结束位置，内容记录
            Map<String,String> map=new HashMap<>();
            map.put("begin",""+ImgIndexBegin);
            map.put("end",""+ImgIndexEnd);
            map.put("text",""+ImgText);
            texts.add(map);


        }
        return texts;

    }
}
